***************************************
*          @@  FLEX 3 @@              *                  
*                                     *
*   ------ >> Chapitre 10 << ------   *
*                                     *
***************************************





compc [options] -include-classes class [...]
compc -o monComposant.swc 
-root monComposant.mxml



<mx:ArrayCollection id="sourceDonnees">
    <mx:Object idt="1" champFiltre="Tucano Flylab"/>
    <mx:Object idt="2" champFiltre="Pou du ciel"/>
    <mx:Object idt="3" champFiltre="Skyranger"/>
    <mx:Object idt="4" champFiltre="A22 Vision"/>
    <mx:Object idt="5" champFiltre="Storch"/>
</mx:ArrayCollection>
package com.composants
{
	import mx.containers.Canvas;

	public class FiltreTableau extends Canvas
	{
	    public function FiltreTableau()
	    {
	        super();
	    }
	
	}
}
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:compFT="com.composants.*">
	
<compFT:FiltreTableau
	    id="ComposantFiltreTableau"
	    width="420" 
	    height="420"
    x="10"
    y="10">
	</compFT:FiltreTableau>
	
</mx:Application>
package com.composants
{
	import mx.containers.Canvas;
	
	import mx.controls.DataGrid;
	import mx.controls.Label;
	import mx.controls.TextInput;
	
	public class FiltreTableau extends Canvas
	{
		    private var _libelle:Label = new Label();
	    private var _zoneTexte:TextInput = new TextInput;
	    private var _datagrid:DataGrid = new DataGrid();
	
	    public function FiltreTableau()
	    {
	        super();
	
	        // Ajout du libell
	        _libelle.x=10
	        _libelle.y=10
	        _libelle.width = 100;
	        this.addChild(_libelle);
	
	        // Ajout de la zone de texte
	        _zoneTexte.x = 110;
	        _zoneTexte.y = 10;
	        this.addChild(_zoneTexte);
	
	        // Ajout du DataGrid
	        _datagrid.x=10;
	        _datagrid.y=40;	
	        this.addChild(_datagrid);
	    }

	}
}
	import mx.collections.ArrayCollection;
public class FiltreTableau extends Canvas
{
[]
private var _tableauDonnees:ArrayCollection = new ArrayCollection();
	
	    public function FiltreTableau()
	    {
	        super();
	         []
	    }
	
	    public function set tableauDonnees(t:ArrayCollection):void{
	        _datagrid.dataProvider = t;
	        _tableauDonnees = t;
	    }
	
	    public function get tableauDonnees():ArrayCollection{
	        return _tableauDonnees;
	    }
}
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:compFT="com.composants.*">
		
<mx:ArrayCollection id="sourceDonnees">
    <mx:Object idt="1" champFiltre="Tucano Flylab"/>
    <mx:Object idt="2" champFiltre="Pou du ciel"/>
    <mx:Object idt="3" champFiltre="Skyranger"/>
    <mx:Object idt="4" champFiltre="A22 Vision"/>
    <mx:Object idt="5" champFiltre="Storch"/>
</mx:ArrayCollection>
		
<compFT:FiltreTableau
	    id="ComposantFiltreTableau"
	    width="420"
	    height="420"
	    x="10"
	    y="10"
    tableauDonnees="{sourceDonnees}"
	>
	</compFT:FiltreTableau>
		
</mx:Application>
import mx.controls.dataGridClasses.DataGridColumn;

public class FiltreTableau extends Canvas
{
[]
private var _colonnes:ArrayCollection = new ArrayCollection();

[]
public function set colonnes(col:ArrayCollection):void{
	_colonnes = col;
	ajouterColonnes()
	
}

public function get colonnes():ArrayCollection{
	
	return _colonnes;
}

public function ajouterColonnes():void
{
    var listeColonnes:Array = new Array();
	
    for (var i:int=0; i<_colonnes.length;i++)
    {
	        var colonne:DataGridColumn = new DataGridColumn();
	        colonne.headerText = _colonnes[i].entete;
        colonne.dataField = _colonnes[i].champ;
	        colonne.visible = _colonnes[i].visible;
	        colonne.width = _colonnes[i].longueur;
	        listeColonnes.push(colonne);
    }
	
	    _datagrid.columns = listeColonnes;
}

}
<mx:ArrayCollection id="colonnes">

    <mx:Object entete="IDT" champ="idt" visible="false" longueur="10"/>
	    <mx:Object entete="Nom des appareils" champ="champFiltre" visible="true" longueur="300"/>
</mx:ArrayCollection>
		
<compFT:FiltreTableau
	    id="ComposantFiltreTableau"
	    width="420"
	    height="420"
	    x="10"
	    y="10 
	    tableauDonnees="{sourceDonnees}"
	    colonnes="{colonnes}"
	>
	
</compFT:FiltreTableau>
public function set libelle(texte:String):void{
	    _libelle.text = texte;
	    }
<compFT:FiltreTableau
	    id="ComposantFiltreTableau"
	    width="420"
	    height="420"
	    x="10"
	    y="10"
	    tableauDonnees="{sourceDonnees}"
	    colonnes="{colonnes}"
	    libelle="Appareil ULM :"
	>
package com.composants
{
	import mx.containers.Canvas;
	import mx.collections.ArrayCollection;
	
	import mx.controls.DataGrid;
	import mx.controls.Label;
	import mx.controls.TextInput;
	
	import mx.controls.dataGridClasses.DataGridColumn;
	
	public class FiltreTableau extends Canvas
	{
    private var _libelle:Label = new Label();
	    private var _zoneTexte:TextInput = new TextInput;
	    private var _datagrid:DataGrid = new DataGrid();

	    private var _tableauDonnees:ArrayCollection = new ArrayCollection();
	    private var _colonnes:ArrayCollection = new ArrayCollection();

	    public function FiltreTableau()
    {
	        super();
	
	        // Ajout du libell
	        _libelle.x=10
	        _libelle.y=10
	        _libelle.width = 100;
	        this.addChild(_libelle);
	
	        // Ajout de la zone de texte
	        _zoneTexte.x = 110;
	        _zoneTexte.y = 10;
	        this.addChild(_zoneTexte);
	
	        // Ajout du DataGrid
	        _datagrid.x=10;
	        _datagrid.y=40;	
	        this.addChild(_datagrid);
	    }

	    public function set tableauDonnees(t:ArrayCollection):void{
	        _datagrid.dataProvider = t;
	        _tableauDonnees = t;
	    }
	

	    public function get tableauDonnees():ArrayCollection{
	        return _tableauDonnees;
	    }
	
	    public function set colonnes(col:ArrayCollection):void{
	        _colonnes = col;
	        ajouterColonnes()
	    }
	
	    public function get colonnes():ArrayCollection{
	        return _colonnes;
	    }
	
	    public function ajouterColonnes():void
	    {
	        var listeColonnes:Array = new Array();
	
	        for (var i:int=0; i<_colonnes.length;i++)
	        {
	            var colonne:DataGridColumn = new DataGridColumn();
	            colonne.headerText = _colonnes[i].entete;
	            colonne.dataField = _colonnes[i].champ;
	            colonne.visible = _colonnes[i].visible;
	            colonne.width = _colonnes[i].longueur;
	            listeColonnes.push(colonne);
	        }
	
	        _datagrid.columns = listeColonnes;
	    }
	
	    public function set libelle(texte:String):void{
	        _libelle.text = texte;
	    }
	
	}
} 
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:compFT="com.composants.*">
		
<mx:ArrayCollection id="sourceDonnees">
    <mx:Object idt="1" champFiltre="Tucano Flylab"/>
    <mx:Object idt="2" champFiltre="Pou du ciel"/>
    <mx:Object idt="3" champFiltre="Skyranger"/>
    <mx:Object idt="4" champFiltre="A22 Vision"/>
    <mx:Object idt="5" champFiltre="Storch"/>
</mx:ArrayCollection>
	
<mx:ArrayCollection id="colonnes">
    <mx:Object entete="IDT" champ="idt" visible="false" longueur="10"/>
	    <mx:Object entete="Noms des appareils" champ="champFiltre" visible="true" longueur="300"/>
</mx:ArrayCollection>
		
<compFT:FiltreTableau
	    id="ComposantFiltreTableau"
	    width="420"
	    height="420"
	    x="10"
	    y="10"
	    tableauDonnees="{sourceDonnees}"
	    colonnes="{colonnes}"
	    libelle="Appareil ULM :"
	>
	</compFT:FiltreTableau>
		
</mx:Application>
import flash.events.Event;
	import mx.events.ListEvent;
_zoneTexte.addEventListener(Event.CHANGE,evenementModification);
public function evenementModification(e:Event):void
	    {
	        var texteSaisi:String = _zoneTexte.text;
	        _tableauDonnees.filterFunction = filtrageDonnees;
	        _tableauDonnees.refresh();
	        _datagrid.dataProvider = _tableauDonnees;
	    }
	

	public function filtrageDonnees(item:Object):Boolean
	    {
	        return !item.champFiltre.length || item.champFiltre.toUpperCase().indexOf(_zoneTexte.text.toUpperCase()) >= 0;
	    }
<mx:TextInput x="10" y="457" width="198" id="idITem"/>
_datagrid.addEventListener(ListEvent.ITEM_CLICK,renvoyerIdentifiant)
public class FiltreTableau extends Canvas
{
	[...]
private var _valeurRenvoyee:String;
	[...]
}
public function set valeurRenvoyee(valeur:String):void{
	    _valeurRenvoyee = valeur;
	}

public function get valeurRenvoyee():String {
	    return _valeurRenvoyee;
	}

public function renvoyerIdentifiant(e:Event):void
{
	    _valeurRenvoyee = String(e.currentTarget.selectedItem.idt);
}
<mx:TextInput x="10" y="457" width="198" id="idITem" text="{ComposantFiltreTableau.valeurRenvoyee}"/>
public function set valeurRenvoyee(valeur:String):void{
	    _valeurRenvoyee = valeur;
	    dispatchEvent(new Event("changementValeurRenvoyee"));
}
	
	    [Bindable("changementValeurRenvoyee")]
	    public function get valeurRenvoyee():String{
	        return _valeurRenvoyee;
	    }
package com.composants
{
	import mx.containers.Canvas;
	import mx.collections.ArrayCollection;
	
	import mx.controls.DataGrid;
	import mx.controls.Label;
	import mx.controls.TextInput;
	
	import mx.controls.dataGridClasses.DataGridColumn;
	import flash.events.Event;
	import mx.events.ListEvent;
	
	public class FiltreTableau extends Canvas
	{
	    private var _tableauDonnees:ArrayCollection = new ArrayCollection();
	    private var _datagrid:DataGrid = new DataGrid();
	    private var _libelle:Label = new Label();
	    private var _zoneTexte:TextInput = new TextInput;
	    private var _colonnes:ArrayCollection = new ArrayCollection();
	    private var _champRecherche:String;

	    private var _valeurRenvoyee:String;
	
	    public function FiltreTableau()
	    {
	        super();
	
	        // Ajout dun libell
	        _libelle.x=10
	        _libelle.y=10
	        _libelle.width = 100;
	        this.addChild(_libelle);
	
	        // Ajout de la zone de texte
	        _zoneTexte.x = 110;
	        _zoneTexte.y = 10;
	        	_zoneTexte.addEventListener(Event.CHANGE,evenementModification);
	        this.addChild(_zoneTexte);
	
	        //Ajout du DataGrid
	        _datagrid.x=10;
	        _datagrid.y=40;
	        	_datagrid.addEventListener(ListEvent.ITEM_CLICK,renvoyerIdentifiant)
	        this.addChild(_datagrid);
	    }
	
	    // Mthodes Setters (affection de valeur aux attributs) et Getters (recuperation des valeurs affectes aux attributs)et Getters
	
	    public function set valeurRenvoyee(valeur:String):void{
	        _valeurRenvoyee = valeur;
	        dispatchEvent(new Event("changementValeurRenvoyee"));
	    }
	
	    [Bindable("changementValeurRenvoyee")]
	    public function get valeurRenvoyee():String{
	        return _valeurRenvoyee;
	    }
	
	    public function set libelle(texte:String):void{
	        _libelle.text = texte;
	    }
	
	    public function get libelle():String{
	        return _libelle.text;
	    }
	
	    public function set tableauDonnees(t:ArrayCollection):void{
	        _datagrid.dataProvider = t;
	        _tableauDonnees = t;
	    }
	
	    public function get tableauDonnees():ArrayCollection{
	        return _tableauDonnees;
	    }
	
	    public function set champRecherche(champ:String):void{
	        _champRecherche = champ;
	    }

	    public function get champRecherche():String{
	        return _champRecherche;
    }
	
	    public function set colonnes(col:ArrayCollection):void{
	        _colonnes = col;
	        ajouterColonnes()
	    }
	
	    public function get colonnes():ArrayCollection{
	        return _colonnes;
	    }
	
	    // Mthode dajout des colonnes
	    public function ajouterColonnes():void
	    {
	        var listeColonnes:Array = new Array();
	
	        for (var i:int=0; i<_colonnes.length;i++)
	        {
	            var colonne:DataGridColumn = new DataGridColumn();
	            colonne.headerText = _colonnes[i].entete;
	            colonne.dataField = _colonnes[i].champ;
	            colonne.visible = _colonnes[i].visible;
	            colonne.width = _colonnes[i].longueur;
	            listeColonnes.push(colonne);
	        }
	
	        _datagrid.columns = listeColonnes;
	    }

	    public function evenementModification(e:Event):void
	    {
	        var texteSaisi:String = _zoneTexte.text;
	        _tableauDonnees.filterFunction = filtrageDonnees;
	        _tableauDonnees.refresh();
	        _datagrid.dataProvider = _tableauDonnees;
	    }
	
	    public function filtrageDonnees(item:Object):Boolean
	    {
	        return !item.champFiltre.length || item.champFiltre.toUpperCase().indexOf(_zoneTexte.text.toUpperCase()) >= 0;
	    }

	    public function renvoyerIdentifiant(e:Event):void
	    {
	        _valeurRenvoyee = String(e.currentTarget.selectedItem.idt);
	    }
	
	}
}
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:compFT="com.composants.*">
		
<mx:ArrayCollection id="sourceDonnees">
    <mx:Object idt="1" champFiltre="Tucano Flylab"/>
    <mx:Object idt="2" champFiltre="Pou du ciel"/>
    <mx:Object idt="3" champFiltre="Skyranger"/>
    <mx:Object idt="4" champFiltre="A22 Vision"/>
    <mx:Object idt="5" champFiltre="Storch"/>
</mx:ArrayCollection>
	
<mx:ArrayCollection id="colonnes">
    <mx:Object entete="IDT" champ="idt" visible="false" longueur="10"/>
	    <mx:Object entete="Nom des appareils" champ="champFiltre" visible="true" longueur="300"/>
</mx:ArrayCollection>
		
<compFT:FiltreTableau id="ComposantFiltreTableau"
	    x="10"
	    y="10"
	    width="420"
	    height="320"
	    libelle ="Appareil ULM : "
	    tableauDonnees="{sourceDonnees}"
	    colonnes="{colonnes}"
	>
	</compFT:FiltreTableau>

<mx:TextInput x="10" y="457" width="198" id="idITem" text="{ComposantFiltreTableau.valeurRenvoyee}"/>

</mx:Application>
compc -o "c:/librairieComposants/compFiltreTableau.swc" -source-path="RootProjetFlex/\src" -include-classes="com.composants.FiltreTableau"
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:composants="com.composants.*">
	
<mx:ArrayCollection id="sourceDonnees">
    <mx:Object idt="1" champFiltre="Aerides" couleur="Bleu" prix="19 "/>
    <mx:Object idt="2" champFiltre="Bulbophyllum" couleur="Rouge / Blanc" prix="17 "/>
    <mx:Object idt="3" champFiltre="Masdevallia" couleur="Rose" prix="40 "/>
    <mx:Object idt="4" champFiltre="Miltoniopsis" couleur="Vert / Jaune" prix="6 "/>
    <mx:Object idt="5" champFiltre="Phalaenopsis" couleur="Rose" prix="21 "/>
</mx:ArrayCollection>
	
<mx:ArrayCollection id="colonnes">
    <mx:Object entete="IDT" champ="idt" visible="false" longueur="10"/>
	    <mx:Object entete="Espce" champ="champFiltre" visible="true" longueur="100"/>
	    <mx:Object entete="Couleur" champ="couleur" visible="true" longueur="100"/>
	    <mx:Object entete="Prix" champ="prix" visible="true" longueur="60"/>
</mx:ArrayCollection>
	
<composants:FiltreTableau
    id="listeOrchidees"
    width="480"
    height="370"
	    libelle="Orchide :"
	    tableauDonnees="{sourceDonnees}"
	    colonnes="{colonnes}">
</composants:FiltreTableau>
		
</mx:Application>
